package com.efuture.chaptersix

/* @Description: Kotlin语言的标准函数与泛型扩展函数 自定义函数实现let函数功能
  let 函数 持有it 该it参数 最后一行决定该函数返回值
 * @Auther: zhaoshanshan
 * @Date: 2022/03/11/5:30 下午
 */

//自定义myLet函数实现let功能
// private 私有化
// inline  我们的函数是高阶函数，所以用到内联，做lambda的优化，性能提高
// fun<I, O> 在函数中，申明两个泛型，函数泛型  I输入Input， O输出Output
// I.mLet 对I输入Input进行函数扩展，扩展函数的名称是 mLet，意味着，所有的类型，万能类型，都可以用 xxx.mLet
// lambda : (I) -> O   (I输入参数) -> O输出
//  : O  会根据用户的返回类型，变化而变化
// lambda(this) I进行函数扩展，在整个扩展函数里面，this == I本身
private fun<I,O> I.myLet(lambda:(I)->O):O = lambda(this)

fun main() {
   //调用自定义的myLet函数
   var r1:String = "123".myLet{
       "OK"
   }
    println(r1)
   val r2:Char = '男'.myLet {
       'C'
   }
    println(r2)
    val r3:Boolean = true.myLet {
        123
        "123"
        false //返回值由最后一行决定
    }
    println(r3)
}